package com.dys.test11;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/**
 * @className: com.dys.test07.ReceiveTest
 * @description: 接收方
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/08/21 下午10:53
 */
public class ReceiveTest {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        System.out.println("老师上线......");
        // 1.创建套接字：指定接收方端口
        DatagramSocket ds = null;

        try {
            ds = new DatagramSocket(9999);
            while (true) {
                // 2.有一个空的数据包，打算用来接收 发送方 发送过来的数据包
                byte[] b = new byte[1024];
                DatagramPacket dp = new DatagramPacket(b, b.length);

                // 3.接收对方的数据包, 然后放入dp数据包中填充,接收完后，dp里面就填充好内容了
                ds.receive(dp);

                // 4.取出数据
                byte[] data = dp.getData();

                // 取出数据包中的有效长度
                String receiveData = new String(data, 0, dp.getLength());
                System.out.println("发送方对我说：" + receiveData);
                if (receiveData.equals("bye")) {
                    System.out.println("学生下线了,老师也下线......");
                    break;
                }

                // 接收方 回复 发送方
                // 准备数据包
                Scanner sc = new Scanner(System.in);
                System.out.print("接收方回复：");
                String sendData = sc.next();
                byte[] dataBytes = sendData.getBytes();
                /*
                 * 需要四个参数；
                 * 1.指的是传送数据转为字节数组
                 * 2.字节数组的长度
                 * 3.封装接收方的ip
                 * 4.指定接收方的端口号
                 * */
                DatagramPacket dp2 = new DatagramPacket(dataBytes, dataBytes.length, InetAddress.getByName("localhost"), 8888);
                // 发送
                ds.send(dp2);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            // 5.关闭资源
            if (ds != null) {
                ds.close();
            }
        }
    }
}
